package com.yyh1;

import java.util.HashSet;
import java.util.Objects;
import java.util.Scanner;

/*超市会员管理系统使用匿名内部类方法
* 1.定义超市会员信息类UserInfo，放入实体层（会员信息类中可以增加会员密码属性）
2.定义超市会员信息管理类UserInfoManager，通过一个集合实现对超市会员信息的管理，放入业务层。提示：集合选用Hashset
3.UserInfoManager类中，实现public void inital(){}方法，用于完成对超市会员信息管理系统的初始化功能（集合的初始化）
4.UserInfoManager类中，实现public void mainMenu(){}方法，用于完成功能面板的展示及功能选择
5.UserInfoManager类中，实现private void searchAll(){}方法，用于完成超市会员信息的查看功能
6.UserInfoManager类中，实现private void deleteUserInfo(){}方法，用于完成删除超市会员信息的功能
7.UserInfoManager类中，实现private void addUserInfo(){}方法，用于完成新增超市会员信息的功能
8.定义测试类Test，放入表示层；在测试类中，先初始化超市会员信息管理系统，然后调用mainMenu()方法,实现具体功能
9.编写代码过程中，尽量每完成一个功能，就对其进行测试*/
public class Test22 {
    public static void main(String[] args) {
        UserInfo2Manager manager2 = new UserInfo2Manager(){
            private HashSet<UserInfo2> userInfo2Set = new HashSet<>();
            private Scanner scanner = new Scanner(System.in);

            @Override
            public void inital2() {
                userInfo2Set.add(new UserInfo2("1", "张三", "123456", 1000));
                userInfo2Set.add(new UserInfo2("2", "李四", "123456", 1000));
                userInfo2Set.add(new UserInfo2("3", "王五", "123456", 1000));
                userInfo2Set.add(new UserInfo2("4", "赵六", "123456", 1000));
                System.out.println("初始化成功！");
            }
            @Override
            public void mainMenu() {
                while (true) {
                    System.out.println("==========超市会员信息管理系统==========");
                    System.out.println("1.查看所有会员信息");
                    System.out.println("2.删除会员信息");
                    System.out.println("3.添加会员信息");
                    System.out.println("4.退出");
                    System.out.println("请选择：");
                    Scanner scanner = new Scanner(System.in);
                    int choice = scanner.nextInt();
                    switch (choice) {
                        case 1:
                            searchAll();
                            break;
                        case 2:
                            deleteUserInfo();
                            break;
                        case 3:
                            addUserInfo();
                            break;
                        case 4:
                            System.out.println("退出成功！");
                            return;
                        default:
                            System.out.println("输入错误！请重新输入！");
                    }
                }
            }
            @Override
            //查看所有会员信息
            public void searchAll() {
                if (userInfo2Set.size() == 0) {
                    System.out.println("当前没有会员信息！");
                } else {
                    for (UserInfo2 userInfo2 : userInfo2Set) {
                        System.out.println(userInfo2);
                    }
                }
            }
            @Override
            //删除会员信息
            public void deleteUserInfo() {
                System.out.println("\n======= 删除会员信息 =======");
                searchAll();

                System.out.print("请输入要删除的会员编号：");
                String id = scanner.next();
                scanner.nextLine(); // 消耗掉next()留下的换行符

                UserInfo2 userToDelete = getIndex(id);
                if (userToDelete == null) {
                    System.out.println("未找到ID为" + id + "的会员！");
                    return;
                }

                System.out.println("找到会员信息: " + userToDelete);
                System.out.print("确认删除吗？(Y-是/N-否): ");
                String confirm = scanner.nextLine();

                if (confirm.equalsIgnoreCase("Y")) {
                    userInfo2Set.remove(userToDelete);
                    System.out.println("删除成功！");
                    System.out.println("删除后的所有会员信息:");
                    searchAll();
                } else {
                    System.out.println("已取消删除操作");
                }
            }
            @Override
            //添加会员信息
            public void addUserInfo() {
                Scanner scanner = new Scanner(System.in);
                System.out.println("请输入会员编号：");
                String id = scanner.next();
                if (checkId(id)) {
                    System.out.println("会员编号已存在！");
                    return;
                }
                System.out.println("请输入会员姓名：");
                String name = scanner.next();
                System.out.println("请输入会员密码：");
                String password = scanner.next();
                System.out.print("请输入初始积分: ");
                int points;
                try {
                    points = Integer.parseInt(scanner.nextLine());
                } catch (NumberFormatException e) {
                    System.out.println("积分必须为数字！");
                    return;
                }

                UserInfo2 newUser = new UserInfo2(id, name, password, points);
                userInfo2Set.add(newUser);
                System.out.println("新增会员成功！");
                System.out.println("新增会员信息: " + newUser);
            }
            //辅助方法：根据ID查找会员
            private UserInfo2 getIndex(String id) {
                for (UserInfo2 userInfo2 : userInfo2Set) {
                    if (userInfo2.getId().equals(id)) {
                        return userInfo2;
                    }
                }
                return null;
            }
            //辅助方法：检查id是否存在
            private boolean checkId(String id) {
                return getIndex(id) != null;
            }
        };
        manager2.inital2();
        manager2.mainMenu();
    }
}

class UserInfo2 {
    //属性
    //会员编号
    private String id;
    //会员姓名
    private String name;
    //会员密码
    private String password;
    //会员积分
    private int prints;
    //无参构造方法
    public UserInfo2() {
    }
    //有参构造方法
    public UserInfo2(String id, String name, String password, int prints) {
        this.id = id;
        this.name = name;
        this.prints = prints;
        this.password = password;
    }


    //setter和getter方法
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getPrints() {
        return prints;
    }

    public void setPrints(int prints) {
        this.prints = prints;
    }
    //equals和hashCode方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        UserInfo2 userInfo2 = (UserInfo2) o;
        return prints == userInfo2.prints && Objects.equals(id, userInfo2.id) && Objects.equals(name, userInfo2.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, prints);
    }
    //toString方法
    @Override
    public String toString() {
        return "UserInfo{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ",password=" + password +
                ", prints=" + prints +
                '}';
    }
}

//接口类型
interface UserInfo2Manager {
    void inital2();
    void mainMenu();
    void searchAll();
    void deleteUserInfo();
    void addUserInfo();
}

